package utils

import (
	"crypto/md5"
	"crypto/rand"
	"crypto/rsa"
)

type RsaGen struct {
	privateKey *rsa.PrivateKey
}

func NewRsa() *RsaGen {
	//生成私钥
	privateKey, err := rsa.GenerateKey(rand.Reader, 1024)
	if err != nil {
		panic(err)
	}
	return &RsaGen{privateKey: privateKey}
}

func (r *RsaGen) Decode(data []byte) []byte {
	decryptedBytes, err := rsa.DecryptOAEP(md5.New(), rand.Reader, r.privateKey, data, nil)
	if err != nil {
		panic(err)
	}
	return decryptedBytes
}

func (r *RsaGen) Encode(data []byte) []byte {
	encryptedBytes, err := rsa.EncryptOAEP(md5.New(), rand.Reader, &r.privateKey.PublicKey, data, nil)
	if err != nil {
		panic(err)
	}

	return encryptedBytes
}
